/*
 * 并查集主要包括两个操作，判断是否同一个连通分量（即判断祖先节点是否相同），和合并两个不同连通分量
 */
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN=1050;
//uf[i]中保存i的上一个节点，路径压缩后保存i的祖先节点
//uf[x]=x即为祖先节点
int uf[MAXN];
int find(int x){
	//路径压缩
	//return uf[x]==x ? x : uf[x]=find(uf[x]);
    int t=x;
    while(t!=uf[t]){
        t=uf[t];
    }
    return uf[x]=t;
}
void unit(int a,int b){
	int ua=uf[a];
	int ub=uf[b];
	//可以给连通分量加一个树高值，保证树的相对平衡
	if(ua!=ub){
		uf[ua]=ub;
	}
}
bool isUnit(int a,int b){
	return find(a)==find(b);
}
int main(void){
	/*
	 * 1-2
	 * 2-4
	 * 2-3
	 * 4-6
	 * 5-7
	 * 7-8
	 */
	int u,n,m;
	scanf("%d",&n);
	//初始化
	for(int i=0;i<n;i++){
		scanf("%d",&u);
		uf[u]=u;
	}
	int a,b;
	//合并
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		scanf("%d%d",&a,&b);
		unit(a,b);
	}
	int j,k;
	scanf("%d%d",&j,&k);
	printf("%d\n",isUnit(j,k));
	return 0;
}
